/*
? JavaScript ES6的Map类有以下常见方法：
? -  clear() ：删除Map中的所有键值对
? -  delete(key) ：从Map中删除指定键的值
? -  entries() ：返回Map对象中所有键值对的数组
? -  forEach(callbackFn, thisArg) ：以插入顺序执行给定的回调函数
? -  get(key) ：获取指定键的值
? -  has(key) ：如果Map中存在指定键则返回 true ，否则返回 false
? -  keys() ：返回Map对象中所有键的数组
? -  set(key, value) ：向Map对象添加键值对
? -  size ：返回Map对象中键值对的数量
? -  values() ：返回Map对象中所有值的数组
 */

class myMap {
    constructor() {
        this.map = {}
    }
    set(key, value) {
      this.map[key] = value
    }
    get(key) {
        if (this.has(key)) return this[key]
        return false
    }
    clear() {
        this.map = {}
    }
    delete(key) {
        if (this.has(key)) {
            delete this.map[key]
        }
        return false
    }
    entries() {
        return Object.entries(this.map)
    }
    forEach(callback,thisArg) {
        for (let i = 0; i < Object.keys(this.map).length; i ++) {
            callback(Object.keys(this.map)[0],i,this.map)
        }
    }
    has(key) {
        for (let i = 0; i < Object.keys(this.map).length; i ++) {
            if (key === Object.keys(this.map)[i]) return true
        }
        return false
    }
    keys() {
        return Object.keys(this.map)
    }
    size() {
        return Object.keys(this.map).length
    }
    values() {
        return Object.values(this.map)
    }
}


